﻿/********************************************************/
/* For 基于.NET的开发技术 课程设计                      */
/*                    学生选课系统                      */
/*author    ：  吴慧文                                  */
/*time      ：  2009年11月8日                           */
/*版本      ：  1.0                                     */
/*文件名    ：  Students.cs                             */
/********************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CMS
{
    [Serializable]
    class Students
    {
        private List<Student> students;

        //构造函数
        public Students()
        {
            students = new List<Student>();
        }

        //增加学生
        public void addStudent(Student student)
        {
            students.Add(student);
        }

        //删除学生（实质上是通过学生id删除之）
        public void deleteStudent(Student student)
        {
            for (int i = 0; i < students.Count; i++)
            {
                if (students.ElementAt(i).Equals(student))
                {
                    students.RemoveAt(i);
                    break;
                }
            }
        }

        //查询学生 
        //Students s = new Students();
        //s[ID:xx] 按学生编号查询
        //s[NAME:xx] 按学生名字查询
        //s["COURSE:xx"] 按课程号查询学生，即是导出某课程的选课学生
        //s[""] 获取所有学生的信息
        public List<Student> this[string s]
        {
            get
            {
                if (s.Equals(""))
                {
                    return students;
                }
                else
                {
                    string[] tempS = s.Split(':');
                    if (tempS[0] != "" && tempS[1] != "")
                    {
                        if (tempS[0].Equals("ID"))
                        {
                            //根据学生id查询课程
                            return this.getStudentById(tempS[1]);
                        }
                        if (tempS[0].Equals("NAME"))
                        {
                            //根据学生name查询课程
                            return this.getStudentByName(tempS[1]);
                        }
                        if (tempS[0].Equals("COURSE"))
                        {
                            //根据课程id查询学生
                            return this.getStudentByCourse(tempS[1]);
                        }
                    }
                    return null;
                }
            }
        }

        //私有函数，根据学生id查询课程，返回相关学生
        private List<Student> getStudentById(string id)
        {
            List<Student> result = new List<Student>();
            foreach (Student tem in students)
            {
                if (tem.Id.Equals(id))
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，根据学生name查询课程，返回相关学生
        private List<Student> getStudentByName(string name)
        {
            List<Student> result = new List<Student>();
            foreach (Student tem in students)
            {
                if (tem.Name.Equals(name))
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，根据课程id查询学生，返回相关学生
        private List<Student> getStudentByCourse(string courseId)
        {
            List<Student> result = new List<Student>();
            string s = "ID:" + courseId;
            foreach (Student tem in students)
            {
                if (!tem.MyCourses[s].Equals(null))
                {
                    result.Add(tem);
                }
            }
            return result;
        }

    }
}
